|
|
I have managed to create a rocket exhaust plume that is far from perfect
but at least better than having no plume at all. Actually what I really
wanted was something resembling a bluish flame.
It doesn't look bad from a distance when silhouetted against a uniform
background, e.g. the blackness of space or a nearby planet. Problems
start when part of it is silhoutted against a black background and part
of it against a brighter background. In that case the part that is
silhoutted against the bright background appears brighter:
http://www.mmedia.is/bjj/misc/plume_test.jpg
This is unrealistic, my feeling is that this should be opposite, a
bluish flame/plume should be more visible when silhouetted against a
black background.
Two images that illustrate this problem in practice:
http://www.mmedia.is/bjj/misc/cassini_flyby_1294.jpg (OK; silhouetted
against Saturn's rings)
http://www.mmedia.is/bjj/misc/cassini_flyby_1327.jpg (not satisfactory;
silhoutted against both the rings and black space)
The code I used to render plume_test.jpg follows. I have been messing
with it without satisfactory results. I was able to make make this
particular scene look better but that solution wasn't satisfactory
because the flame could look dark against a different background,
something that's not exactly realistic. Does anyone know of a solution ?
What I think *probably* needs changes is towards the bottom (look for
"exhaust_half" and a prominent comment line).
#include "colors.inc"
camera {
location <100,0,0>
look_at <0,10,0>
angle 20
}
light_source {
<1000,300,1500>
color rgb <1,1,1>
}
#declare Thrust=0.5;
#declare nozzle_y=0.06;
#declare nzzy=1-nozzle_y;
#declare exhaust_radius=sqrt(1-nzzy*nzzy);
#declare plume_emission=0.15;
#declare plume_col=<198,247,255>/255;
#declare pl_s=0.07;
#declare col_mul=1.0;
#local denT=density {
spherical
density_map {
[0.0 rgb 0][pl_s rgb plume_col*0.7*col_mul][pl_s+0.01 rgb
plume_col*0.75*col_mul ][pl_s+0.02 rgb plume_col*0.7*col_mul]
[0.17 rgb plume_col*0.4*col_mul][0.25 rgb plume_col*0.1*col_mul]
[0.5 rgb plume_col*0.05*col_mul][0.8 rgb plume_col*0.0]
}
}
#declare col_mul=0.9;
#local denT09=density {
spherical
density_map {
[0.0 rgb 0][pl_s rgb plume_col*0.7*col_mul][pl_s+0.01 rgb
plume_col*0.75*col_mul ][pl_s+0.02 rgb plume_col*0.7*col_mul]
[0.17 rgb plume_col*0.4*col_mul][0.25 rgb plume_col*0.1*col_mul]
[0.5 rgb plume_col*0.05*col_mul][0.8 rgb plume_col*0.0]
}
}
#declare col_mul=0.2;
#local denT02=density {
spherical
density_map {
[0.0 rgb 0][pl_s rgb plume_col*0.7*col_mul][pl_s+0.01 rgb
plume_col*0.75*col_mul ][pl_s+0.02 rgb plume_col*0.7*col_mul]
[0.17 rgb plume_col*0.4*col_mul][0.25 rgb plume_col*0.1*col_mul]
[0.5 rgb plume_col*0.05*col_mul][0.8 rgb plume_col*0.0]
}
}
#declare col_mul=0.1;
#local denT01=density {
spherical
density_map {
[0.0 rgb 0][pl_s rgb plume_col*0.7*col_mul][pl_s+0.01 rgb
plume_col*0.75*col_mul ][pl_s+0.02 rgb plume_col*0.7*col_mul]
[0.17 rgb plume_col*0.4*col_mul][0.25 rgb plume_col*0.1*col_mul]
[0.5 rgb plume_col*0.05*col_mul][0.8 rgb plume_col*0.0]
}
}
#local denT2=//denT
density {
gradient y
density_map {
[0 denT02]
[0.4 denT01]
[1 rgb 0]
}
}
#local denT3=//denT
density {
gradient y
density_map {
[0 denT02]
[0.7 denT09]
[0.85 denT]
[1 denT]
}
}
#declare sphere_half=
intersection {
sphere {
<0,0,0>,2
}
plane {<0,-1,0>,-0.0001}
}
// ************************************* Probably the important stuff:
#declare exhaust_half= // The "half-plume" farthest from the nozzle
object {
sphere_half
hollow
no_shadow
texture { pigment { rgbt 1 } }
interior {
media {
emission plume_emission method 3 intervals 10
density {
denT2
}
}
media {
absorption .2 method 3 intervals 10
density {
denT2
}
}
}
}
#declare exhaust_nozzle_half= // The "half-plume" next to the nozzle
object {
intersection {
object {sphere_half}
plane {<0,1,0>,1-nozzle_y} // Remove what's inside the nozzle
}
hollow
no_shadow
texture { pigment { rgbt 1 } }
interior {
media {
emission plume_emission method 3 intervals 10
density {
denT3
}
}
media {
absorption .2 method 3 intervals 10
density {
denT3
}
}
}
}
#declare exhaust_plume=
merge {
object {exhaust_half}
object {exhaust_nozzle_half scale <1,-1,1>}
translate <0,nzzy,0>
scale <1/exhaust_radius,9*Thrust/exhaust_radius,1/exhaust_radius>
}
object {exhaust_plume}
union {
box {
<-100,-100,-100>,<-50,6.5,100>
}
box {
<-100,6.5,0>,<-50,100,100>
}
pigment {White}
}
Post a reply to this message
|
|